package org.rabbitmq.simple;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.rabbitmq.config.MqConfig;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeoutException;

/**
 * Todo: 生产者服务
 *
 * @Author: hjc_042043@sina.cn
 * @Date: 2024/1/30 01:36
 */
public class Producer {

//    public static void main(String[] args) {
//        System.out.println("生产消息");
//
//        //创建连接工厂
//        ConnectionFactory connFactory = new ConnectionFactory();
//        //设置host
//        connFactory.setHost(MqConfig.HOST);
//        //设置端口，默认是5672
//        connFactory.setPort(MqConfig.PORT);
//        //为用户分配虚拟主机，默认为/
//        connFactory.setVirtualHost("/");
//        //设置用户名
//        connFactory.setUsername(MqConfig.USER_NAME);
//        //设置密码
//        connFactory.setPassword(MqConfig.PASSWORD);
//
//        //创建连接
//        Connection connection = null;
//        try {
//            connection = connFactory.newConnection();
//            //创建信道
//            Channel channel = connection.createChannel();
//            //通过信道来管理队列，只有队列不存在时则创建,声明一个队列是幂等的。
//            channel.queueDeclare(MqConfig.SIMPLE_QUEUE_NAME, false, false, false, null);
//            //生产消息
//            String msg = "简单模式，hello,world!";
//            channel.basicPublish("", MqConfig.SIMPLE_QUEUE_NAME, null, msg.getBytes(StandardCharsets.UTF_8));
//            System.out.println("[生产者] send :" + msg);
//        } catch (IOException | TimeoutException e) {
//            throw new RuntimeException(e);
//        } finally { //关闭连接
//            try {
//                connection.close();
//            } catch (IOException e) {
//                throw new RuntimeException(e);
//            }
//        }
//    }

    public static void main(String[] args) {
        System.out.println("生产消息");

        //创建连接工厂
        ConnectionFactory connFactory = new ConnectionFactory();
        //设置host
        connFactory.setHost(MqConfig.HOST);
        //设置端口，默认是5672
        connFactory.setPort(MqConfig.PORT);
        //为用户分配虚拟主机，默认为/
        connFactory.setVirtualHost("/");
        //设置用户名
        connFactory.setUsername(MqConfig.USER_NAME);
        //设置密码
        connFactory.setPassword(MqConfig.PASSWORD);

        try(//创建连接,类似于python中的with...as，可以自动释放资源,但需要支持autoCloseable接口
            Connection connection = connFactory.newConnection();
            //创建连接
            Channel channel = connection.createChannel()) {

            //通过信道来管理队列，只有队列不存在时则创建,声明一个队列是幂等的。
            channel.queueDeclare(MqConfig.SIMPLE_QUEUE_NAME, false, false, false, null);
            //生产消息
            String msg = "简单模式，hello,world!";
            channel.basicPublish("", MqConfig.SIMPLE_QUEUE_NAME, null, msg.getBytes(StandardCharsets.UTF_8));

            //获取当前日期信息
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            System.out.printf("[生产者] send :%s,时间：%s\n",msg,sdf.format(date));
        } catch (IOException | TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}